﻿package main{
	
    import main.plugin.SWFAddress;
	import main.cuboXML;
	import main.plugin.SWFAddressEvent;
	import flash.display.Sprite;
	import flash.display.Loader;
    import flash.text.TextField;
	import flash.events.Event;
	import flash.events.MouseEvent;
	import flash.events.EventDispatcher;
	import flash.net.URLLoader;
	import flash.net.URLRequest;
	import flash.net.navigateToURL;
	import flash.events.ContextMenuEvent;
    import flash.ui.ContextMenu;
    import flash.ui.ContextMenuItem;	
	import flash.external.ExternalInterface;

	public class cuboWEB extends Sprite {		
		
		//////////////////////////// INICIO VARIAVEIS PUBLICAS ////////////////////////////
		
		public var nomeBotao:String = new String();
		private var xml:XML = new XML();
		private var PalcoCriado:Boolean = false;
		private var TopoCriado:Boolean = false;
		private var nrBotao:Number = 0;
		private var carregaIMG:Loader = new Loader();
		private var tituloURL:String = "";
		private var setPoxTopo:Number = 0;
		private var setPoyTopo:Number = 0;
		private var setPoxPalco:Number = 0;
		private var setPoyPalco:Number = 0;
		private var imgURL:String = "";
		private var cuboXML2:cuboXML = new cuboXML();
		private var urlSite:String = "";
		
		//////////////////////////// INICIO DO CODIGO /////////////////////////////////////
		
		//Funcao que indica se o .AS foi importado
		public function cuboWEB():void {
			trace("Sistema: XML Importado!");
			menuFlash();
			SWFAddress.setValue('');
		}
		
		public function nomeTitulo(tituloURL2:String = ""):void {
			tituloURL = tituloURL2;
		}
		
		//////////////////////////// INICIO FUNCOES DE POSICAO DO TOPO E PALCO /////////////
		
		public function setPosTopo(pox:Number=0,poy:Number=0):void {
			setPoxTopo = pox;
			setPoyTopo = poy;
		}
		
		public function setPosPalco(pox:Number=0,poy:Number=0):void {
			setPoxPalco = pox;
			setPoyPalco = poy;
		}
		
		//////////////////////////// INICIO FUNCOES COM XML ///////////////////////////////
		
		public function importaDados(end:String="arquivos/xml/cubo.xml"):void {
			this.urlSite = end;
			cuboXML2.importar(end);
			cuboXML2.addEventListener("Carregado", ativa);
		}
		private function ativa(e:Event):void{
			xml=cuboXML2.pegaXML();
			dispatchEvent(new Event("Carregado"));
		}

		//////////////////////////// INICIO FUNCOES COM MENU //////////////////////////////
		
		//Funcao para criar o menu (tipo do menu, espacamento entre botoes, inicio em X, inicio em Y, texto do menu, nr do botao)
		public function criarMenu(tipo:Number=0,esp:Number=0,startX:Number=0,startY:Number=0):void {
			trace("Sistema: Criando Menu");
			
			var nr:Number=0;
			var menu:Number=xml.menus.length();
			
			for (nr; nr<menu; nr++) {			
				var botao:Botao = new Botao();			
				addChild(botao);
				
				// Menu Horizontal
				if (tipo == 0){
					if (nr != 0) botao.x=nr*botao.width+esp*nr+startX;
					else if (nr == 0) botao.x=nr*botao.width+startX;
					botao.y=startY;
				}
				// Menu Vertical
				else if (tipo == 1) {
					if (nr != 0) botao.y=nr*botao.height+esp*nr+startY;
					else if (nr == 0) botao.y=nr*botao.height+startY;
					botao.x=startX;
				}
				botao.txtBotao.text = xml.menus[nr].nome;
				botao.name = String(nr);
				botao.cid  = String(xml.menus[nr].cid);
				botao.addEventListener(MouseEvent.CLICK, funcaoBotao);
				botao.addEventListener(MouseEvent.ROLL_OVER, funcaoBotaoCima);
				botao.addEventListener(MouseEvent.ROLL_OUT, funcaoBotaoFora);
			}
			trace("Sistema: Menu criado com sucesso");			
			SWFAddress.addEventListener(SWFAddressEvent.CHANGE, barraEnd);
		}
		
		//Funcao do Botao
		private function funcaoBotao (evt:MouseEvent):void {
			if ( nrBotao != Number(evt.currentTarget.name) ){
				trace("Sistema: Nr do Botao: "+evt.currentTarget.name);
				SWFAddress.setValue(xml.menus[evt.currentTarget.name].nome);
				nomeBotao=evt.currentTarget.name;
				nrBotao = Number(evt.currentTarget.name);
			}
			ExternalInterface.call("showTexto",Number(evt.currentTarget.cid) );
		}
		
		private function funcaoBotaoCima (evt:MouseEvent):void {
			var nr:Number = Number(evt.currentTarget.name);
			SWFAddress.setStatus(xml.menus.nome[nr]);
			trace("Sistema: Mouse Cima - "+xml.menus.nome[nr]);
		}
		
		private function funcaoBotaoFora (evt:MouseEvent):void {
			SWFAddress.resetStatus();
			trace("Sistema: Mouse Fora");
		}
		
		//////////////////////////// INICIO FUNCOES COM PALCO /////////////////////////////
		
		//Funcao para criar palco (inicio em X, inicio em Y, texto do menu, tipo de texto)
		public function criaPalco(startX:Number=0,startY:Number=0,posicao:Number=0):void {
			trace("Sistema: Criando Palco");
			
			var tipo:Number = new Number();

			if (PalcoCriado == true){ 
				removeChild(getChildByName("campo"));
				trace("Sistema: Palco Anterior Removido");				
			}

			trace("Sistema: Criando Novo Palco");
			var campo:Palco = new Palco();
			addChild(campo);
			
			campo.x = startX;
			campo.y = startY;
			
			tipo=xml.menus[posicao].tipo;			
			campo.name = "campo";
			campo.gotoAndStop(tipo);
			
			if (tipo == 1) {
				campo.txt1.htmlText = xml.menus[posicao].texto1;
			}
			else if (tipo == 2) {
				campo.txt1.htmlText = xml.menus[posicao].texto1;
				campo.txt2.htmlText = xml.menus[posicao].texto2;
			}
			else if (tipo == 3) {
				campo.txt1.htmlText = xml.menus[posicao].texto1;
				var url:String = this.urlSite.replace('/php/cuboWEB_menus.xml.php','/bancoImgs/'+xml.menus[posicao].img1);
				if (imgURL != url){
					carregaIMG.load(new URLRequest(url));
					imgURL = String(url);					
					trace("Sistema: Imagem nova carregada");
				}
				campo.imagem1.addChild(carregaIMG);			
			}
			
			PalcoCriado = true;
			
			trace("Sistema: Palco criado com sucesso");

		}
		
		//////////////////////////// INICIO FUNCOES COM TOPO //////////////////////////////
		
		public function criaTopo (startX:Number=0, startY:Number=0, posicao:Number=0):void {
			
			var tipotopo:Number = new Number();
			
			if (TopoCriado == true){ 
				removeChild(getChildByName("campo"));
				trace("Sistema: Topo Anterior Removido");				
			}

			trace("Sistema: Criando Novo Topo");
			var topo:Topo = new Topo();
			addChild(topo);
			
			topo.x = startX;
			topo.y = startY;
			
			tipotopo=xml.menus[posicao].tipotopo;			
			topo.name = "topo";
			topo.gotoAndStop(tipotopo);	
			
			trace("Sistema: Topo criado com sucesso");
			
		}
		
		//////////////////////////// INICIO FUNCOES COM FUNDO /////////////////////////////
		
		public function setPosFundo (startX:Number=0, startY:Number=0):void {

			trace("Sistema: Criando Novo Fundo");
			var fundo:Fundo = new Fundo();
			addChild(fundo);
			
			fundo.x = startX;
			fundo.y = startY;
					
			fundo.name = "fundo";
			
			trace("Sistema: Fundo criado com sucesso");			
		}		
		
		//////////////////////////// INICIO FUNCOES COM BARRA DE ENDERECO /////////////////
		
		public function barraEnd(e:SWFAddressEvent):void{
			var end:String = SWFAddress.getValue();
			var i:Number=0;
			var menu:Number=xml.menus.length();
			
			if(e.value != "/") {
				SWFAddress.setTitle(tituloURL + " - " + end.substring(1));
				for (i; i<menu; i++){
					if (xml.menus.nome[i]==end.substring(1)) {
						criaTopo(setPoxTopo,setPoyTopo,i);
						criaPalco(setPoxPalco,setPoyPalco,i);
						break;
					}
				}
			}
			else {
				SWFAddress.setTitle(tituloURL);
				criaTopo(setPoxTopo,setPoyTopo,i);
				criaPalco(setPoxPalco,setPoyPalco,i);			
			}
			nrBotao = i;
		}
		
		//////////////////////////// INICIO FUNCOES COM MENU FLASH //////////////////////

		private function menuFlash():void {
		var meuContextMenu:ContextMenu = new ContextMenu();
		meuContextMenu.hideBuiltInItems();
 
		var meuItem:ContextMenuItem = new ContextMenuItem("Sistema CUBO Web");
		var meuItem2:ContextMenuItem = new ContextMenuItem("Administração");
		meuItem.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, mostraLink);
		meuItem2.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, mostraLink2);
		meuContextMenu.customItems.push(meuItem);
		meuContextMenu.customItems.push(meuItem2);
 
		contextMenu = meuContextMenu;
		}
		
		private function mostraLink (meuEventoTipo:ContextMenuEvent):void {
			var minhaURL:URLRequest = new URLRequest("http://www.interactiveworld.com.br");
			navigateToURL(minhaURL, "_blank");
		}
		private function mostraLink2 (meuEventoTipo:ContextMenuEvent):void {
			ExternalInterface.call("showLogin");
		}

		//////////////////////////// FIM //////////////////////////////////////////////////
		
	}
}